#ifndef WINDOW_CONFIG_H
#define WINDOW_CONFIG_H

#include <string>
#include <map>
#include <gtk/gtk.h>

// 窗口配置结构
struct WindowConfig {
    int x;
    int y;
    int width;
    int height;
    bool show;    // 标记窗口是否显示
    bool is_set;  // 标记配置是否已设置
    
    WindowConfig() : x(0), y(0), width(0), height(0), show(true), is_set(false) {}
    WindowConfig(int x, int y, int width, int height) : x(x), y(y), width(width), height(height), show(true), is_set(true) {}
    WindowConfig(int x, int y, int width, int height, bool show) : x(x), y(y), width(width), height(height), show(show), is_set(true) {}
};

class WindowConfigManager {
public:
    // 加载窗口配置
    static bool loadWindowConfig(const std::string& configFile);
    
    // 保存窗口配置
    static bool saveWindowConfig(const std::string& configFile);
    
    // 获取特定窗口的配置
    static WindowConfig getWindowConfig(const std::string& windowName);
    
    // 设置特定窗口的配置
    static void setWindowConfig(const std::string& windowName, const WindowConfig& config);
    
    // 保存窗口大小和位置的回调函数
    static gboolean on_window_size_allocate(GtkWidget *widget, GtkAllocation *allocation, gpointer user_data);
    
    // 应用窗口配置到窗口
    static void applyWindowConfig(GtkWidget* window, const std::string& windowName);

private:
    static std::map<std::string, WindowConfig> windowConfigs;
    static std::string getConfigFilePath(const std::string& configFile);
};

#endif // WINDOW_CONFIG_H